package com.example.mybatisdemo.mapper;

import com.example.mybatisdemo.model.UserInfo;
import org.apache.ibatis.annotations.*;

import java.util.List;
@Mapper//通过注解表示将这个对象交给spring管理
public interface UserInfoMapper {

    @Select("select *from userInfo1")//查询注解
    List<UserInfo> queryUserInfo();

    @Select("select * from userinfo1 where id = #{id}")
    UserInfo queryInfo(@Param("id") Integer id);

    @Select("select * from userinfo1 where id = #{id} and username =#{name}")
    //加上Param注解,使注解内设定的名称和sql语句里面的名称一至(#{这个里面的名称})
    UserInfo queryInfo1(@Param("id") Integer id,@Param("name") String username);


    @Insert("insert into userinfo1(id,username,`password`,age) values (#{id},#{username},#{password},#{age})")
    Integer insert(UserInfo userInfo);

    @Options(useGeneratedKeys = true,keyProperty = "id")//获取自增的id 但是数据库中我设置了id是主键,所以没有插入成功
    @Insert("insert into userinfo1(username,`password`,age) values (#{userinfo.username},#{username.password},#{username.age})")
    Integer insert2(@Param("userinfo") UserInfo userInfo);

    //当表内的名称与设定的类型名称不一致时,可以通过以下两种方式进行查询
    //第一种:起别名
    @Select("select id,username as name,password,age from userinfo1")
    List<UserInfo> queryUserInfo2();

    //第二种:通过注解
    @Results(id = "BaseMap",value = {
            @Result(column = "",property = ""),
            @Result(column = "",property = "")
    })
    //column = "列名",property = "类型名"
    //多次映射(复用)可以使用 @ResultMap 注解 --> 此时需要有一个@Results注解,有id和value
    @Select("select * from userinfo1")
    List<UserInfo> queryUserInfo3();
}
